home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 May / EnigmA AMIGA RUN 18 (1997)(G.R. Edizioni)(IT)[!][issue 1997-05][EAR-CD II].iso / ghost / gs403src_gs.lha / gs4.03 / gdevstc.h < prev    next >
C/C++ Source or Header  |  1996-05-09  |  9KB  |  253 lines

  1. /* Copyright (C) 1995, 1996 Aladdin Enterprises.  All rights reserved.
  2.   
  3.   This file is part of Aladdin Ghostscript.
  4.   
  5.   Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
  6.   or distributor accepts any responsibility for the consequences of using it,
  7.   or for whether it serves any particular purpose or works at all, unless he
  8.   or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
  9.   License (the "License") for full details.
  10.   
  11.   Every copy of Aladdin Ghostscript must include a copy of the License,
  12.   normally in a plain ASCII text file named PUBLIC.  The License grants you
  13.   the right to copy, modify and redistribute Aladdin Ghostscript, but only
  14.   under certain conditions described in the License.  Among other things, the
  15.   License requires that the copyright notice and this notice be preserved on
  16.   all copies.
  17. */
  18.  
  19. /* gdevstc.h */
  20. /* Epson Stylus-Color Printer-Driver */
  21. #ifndef   gdevstc_INCLUDED
  22. #  define gdevstc_INCLUDED
  23.  
  24. /***
  25.  *** This holds most of the declarations used by gdevstc.c/stcolor.
  26.  *** It should be included by the dithering-routines and should be
  27.  *** modified to include the separately compilable routines.
  28.  ***/
  29.  
  30. /*** Ghostscript-Headers ***/
  31.  
  32. #include "gdevprn.h"
  33. #include "gsparam.h"
  34. #include "gsstate.h"
  35.  
  36. /*** Private Type for 32Bit-Pixels ***/
  37. #if     arch_log2_sizeof_int < 2  /* int is too small */
  38.    typedef unsigned long stc_pixel;
  39. #else                             /* int is sufficient */
  40.    typedef unsigned int  stc_pixel;
  41. #endif                            /* use int or long ? */
  42.  
  43. /*** Auxillary-Device Structure ***/
  44.  
  45. typedef struct stc_s {
  46.    long            flags;      /* some mode-flags */
  47.    int             bits;       /* the number of bits per component */
  48.    const struct stc_dither_s  *dither;     /* dithering-mode */
  49.    float          *am;         /* 3/9/16-E. vector/matrix */
  50.  
  51.    float          *extc[4];    /* Given arrays for stccode */
  52.    uint            sizc[4];    /* Size of extcode-arrays */
  53.    gx_color_value *code[4];    /* cv -> internal */
  54.  
  55.    float          *extv[4];    /* Given arrays for stcvals */
  56.    uint            sizv[4];    /* Size of extvals-arrays */
  57.    byte           *vals[4];    /* internal -> dithering */
  58.  
  59.    stc_pixel  white_run[3];    /* the white-pattern */
  60.    stc_pixel  white_end[3];    /* the white-Trailer */
  61.    gs_param_string_array
  62.                    algorithms; /* Names of the available algorithms */
  63.  
  64.    gs_param_string escp_init;     /* Initialization-Sequence */
  65.    gs_param_string escp_release;  /* Initialization-Sequence */
  66.    int             escp_width; /* Number of Pixels printed */
  67.    int             escp_height;/* Height send to the Printer */
  68.    int             escp_top;   /* Top-Margin, send to the printer */
  69.    int             escp_bottom;/* Bottom-Margin, send to the printer */
  70.  
  71.    int             alg_item;   /* Size of the items used by the algorithm */
  72.  
  73.    int             prt_buf;    /* Number of buffers */
  74.    int             prt_size;   /* Size of the Printer-buffer */
  75.    int             escp_size;  /* Size of the ESC/P2-buffer */
  76.    int             seed_size;  /* Size of the seed-buffers */
  77.  
  78.    int             escp_u;     /* print-resolution (3600 / ydpi )*/
  79.    int             escp_c;     /* selected color */
  80.    int             escp_v;     /* spacing within band */
  81.    int             escp_h;     /* 3600 / xdpi */
  82.    int             escp_m;     /* number of heads */
  83.    int             escp_lf;    /* linefeed in units */
  84.  
  85.    int             prt_y;      /* print-coordinate */
  86.    int             stc_y;      /* Next line 2b printed */
  87.    int             buf_y;      /* Next line 2b loaded into the buffer */
  88.    int             prt_scans;  /* number of lines printed */
  89.  
  90.  
  91.    int            *prt_width;  /* Width of buffered lines */
  92.    byte          **prt_data;   /* Buffered printer-lines */
  93.    byte           *escp_data;  /* Buffer for ESC/P2-Data */
  94.    byte           *seed_row[4];/* Buffer for delta-row compression (prt_size) */
  95.  
  96. } stc_t;
  97.  
  98. /*** Main-Device Structure ***/
  99.  
  100. typedef struct stcolor_device_s {
  101.     gx_device_common;
  102.     gx_prn_device_common;
  103.         stc_t stc;
  104. } stcolor_device;
  105.  
  106. #define STCDFLAG0  0x000001L /* Algorithm-Bit 0 */
  107. #define STCDFLAG1  0x000002L /* Algorithm-Bit 1 */
  108. #define STCDFLAG2  0x000004L /* Algorithm-Bit 2 */
  109. #define STCDFLAG3  0x000008L /* Algorithm-Bit 3 */
  110. #define STCDFLAG4  0x000010L /* Algorithm-Bit 4 */
  111. #define STCCMYK10  0x000020L /* CMYK10-Coding active */
  112.  
  113. #define STCUNIDIR  0x000040L /* Unidirectional, if set */
  114. #define STCUWEAVE  0x000080L /* Hardware Microweave */
  115. #define STCNWEAVE  0x000100L /* Software Microweave disabled */
  116.  
  117. #define STCOK4GO   0x000200L /* stc_put_params was o.k. */
  118.  
  119. #define STCCOMP    0x000C00L /* RLE, Plain (>= 1.18) */
  120. #define STCPLAIN   0x000400L /* No compression */
  121. #define STCDELTA   0x000800L /* Delta-Row */
  122.  
  123. #define STCMODEL   0x00f000L /* STC, ST800 */
  124. #define STCST800   0x001000L /* Monochrome-Variant */
  125. #define STCSTCII   0x002000L /* Stylus Color II */
  126.  
  127. #define STCBAND    0x010000L /* Initialization defined */
  128. #define STCHEIGHT  0x020000L /* Page-Length set */
  129. #define STCWIDTH   0x040000L /* Page-Length set */
  130. #define STCTOP     0x080000L /* Top-Margin set */
  131. #define STCBOTTOM  0x100000L /* Bottom-Margin set */
  132. #define STCINIT    0x200000L /* Initialization defined */
  133. #define STCRELEASE 0x400000L /* Release defined */
  134.  
  135. #define STCPRINT   0x800000L /* Data printed */
  136.  
  137. /*** Datatype for the array of dithering-Algorithms ***/
  138.  
  139. #define stc_proc_dither(name) \
  140.  int name(P5(stcolor_device *sdev,int npixel,byte *in,byte *buf,byte *out))
  141.  
  142. typedef struct stc_dither_s {
  143.   const char *name; /* Mode-Name for Dithering */
  144.   stc_proc_dither((*fun));
  145.   uint        flags;
  146.   uint        bufadd;
  147.   double      minmax[2];
  148. } stc_dither_t;
  149.  
  150. /*
  151.  * Color-Values for the output
  152.  */
  153. #define BLACK   1 /* in monochrome-Mode as well as in CMYK-Mode */
  154. #define RED     4 /* in RGB-Mode */
  155. #define GREEN   2
  156. #define BLUE    1
  157. #define CYAN    8 /* in CMYK-Mode */
  158. #define MAGENTA 4
  159. #define YELLOW  2
  160.  
  161. /*** A Macro to ease Type-depending things with the stc_p-union ***/
  162.  
  163. #define STC_TYPESWITCH(Dither,Action)             \
  164.    switch((Dither)->flags & STC_TYPE)  {          \
  165.    case STC_BYTE: Action(byte); break;            \
  166.    case STC_LONG: Action(long); break;            \
  167.    default:       Action(float); break;}
  168.  
  169. /***
  170.  *** MODIFY HERE to include your routine:
  171.  ***
  172.  *** 1. Declare it here
  173.  *** 2. Add it to the definition of STC_MODI
  174.  *** 3. Add your file to the dependency-list in the Makefile & devices.mak
  175.  ***/
  176.  
  177. /* Step 1. */
  178. stc_proc_dither(stc_gsmono);  /* resides in gdevstc1.c */
  179. stc_proc_dither(stc_fs);      /* resides in gdevstc2.c */
  180. stc_proc_dither(stc_fscmyk);  /* resides in gdevstc2.c too */
  181. stc_proc_dither(stc_gsrgb);   /* resides in gdevstc3.c */
  182. stc_proc_dither(stc_fs2);     /* resides in gdevstc4.c */
  183.  
  184.  
  185. /* Values used to assemble flags */
  186. #define DeviceGray  1 /* ProcessColorModel = DeviceGray  */
  187. #define DeviceRGB   3 /* ProcessColorModel = DeviceRGB   */
  188. #define DeviceCMYK  4 /* ProcessColorModel = DeviceCMYK  */
  189.  
  190. #define STC_BYTE    8 /* Pass Bytes  to the Dithering-Routine */
  191. #define STC_LONG   16 /* Pass Longs  to the Dithering-Routine */
  192. #define STC_FLOAT  24 /* Pass Floats to the Dithering-Routine */
  193. #define STC_TYPE   24 /* all the type-bits */
  194.  
  195. #define STC_CMYK10 32 /* Special 32-Bit CMYK-Coding */
  196. #define STC_DIRECT 64 /* Suppress conversion of Scanlines */
  197. #define STC_WHITE 128 /* Call Algorithm for white lines too (out == NULL) */
  198. #define STC_SCAN  256 /* multiply by number of scanlines in buffer */
  199.  
  200. /* Step 2. */
  201. /* Items: 1. Name to activate it
  202.           2. Name of the dithering-function
  203.           3. Several flags ored together, including # of buffered scanlines
  204.           4. Additional buffer-space (bytes/longs/floats)
  205.           5. Array of double with minimum and maximum-value
  206.    Keep the last line as it is.
  207.  */
  208.  
  209. #define STC_MODI \
  210. {"gsmono", stc_gsmono, DeviceGray|STC_BYTE,0,{0.0,1.0}},\
  211. {"gsrgb" , stc_gsrgb , DeviceRGB |STC_BYTE,0,{0.0,1.0}},\
  212. {"fsmono", stc_fs, \
  213.   DeviceGray|STC_LONG|1*STC_SCAN,3+3*1,{0.0,16777215.0}},\
  214. {"fsrgb",  stc_fs, \
  215.   DeviceRGB |STC_LONG|1*STC_SCAN,3+3*3,{0.0,16777215.0}},\
  216. {"fsx4",   stc_fs, \
  217.   DeviceCMYK|STC_LONG|1*STC_SCAN,3+3*4,{0.0,16777215.0}},\
  218. {"fscmyk", stc_fscmyk, \
  219.   DeviceCMYK|STC_LONG|1*STC_SCAN,3+3*4,{0.0,16777215.0}},\
  220. {"fs2", stc_fs2, \
  221.   DeviceRGB |STC_BYTE|STC_WHITE|1*STC_SCAN,0,{0.0,255.0}},
  222.  
  223.  
  224. #ifndef   X_DPI
  225. #define   X_DPI   360
  226. #endif /* X_DPI */
  227. #ifndef   Y_DPI 
  228. #define   Y_DPI   360
  229. #endif /* Y_DPI */
  230.  
  231. #ifndef   STC_L_MARGIN
  232. #  define STC_L_MARGIN 0.125 /* yields 45 Pixel@360DpI */
  233. #endif /* STC_L_MARGIN */
  234. #ifndef   STC_B_MARGIN
  235. #  define STC_B_MARGIN 0.555 /* yields 198 Pixel@#60DpI (looses 1mm) */
  236. #endif /* STC_B_MARGIN */
  237. /*
  238.  * Right-Margin: Should match maximum print-width of 8".
  239.  */
  240.  
  241. #ifndef   STC_R_MARGIN
  242. #  ifdef A4
  243. #    define STC_R_MARGIN 0.175 /* Yields 63 Pixel@360DpI */
  244. #  else
  245. #    define STC_R_MARGIN 0.375 /* 135 Pixel */
  246. #  endif
  247. #endif /* STC_R_MARGIN */
  248. #ifndef   STC_T_MARGIN
  249. #  define STC_T_MARGIN 0.125
  250. #endif /* STC_T_MARGIN */
  251.  
  252. #endif
  253.